
package br.ucb.cesbdao.janelas;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.SQLException;

import javax.swing.ListSelectionModel;
import javax.swing.table.TableRowSorter;

import org.apache.log4j.Logger;

import br.ucb.cesbdao.enuns.EnumFormatos;
import br.ucb.cesbdao.enuns.EnumLabelAndBotao;
import br.ucb.cesbdao.enuns.EnumMensagens;
import br.ucb.cesbdao.enuns.EnumResources;
import br.ucb.cesbdao.enuns.EnumTipoTrabalhador;
import br.ucb.cesbdao.enuns.EnumTitulo;
import br.ucb.cesbdao.model.TrabalhadorModel;
import br.ucb.cesbdao.model.impl.TrabalhadorModelImpl;
import br.ucb.cesbdao.modeloTabelas.ModeloTabelaAtendente;
import br.ucb.cesbdao.servicos.JanelaUtil;
import br.ucb.cesbdao.servicos.Servicos;
import br.ucb.cesbdao.visao.Visao;

@SuppressWarnings("serial")
public class JanelaListaAtendente extends javax.swing.JFrame implements KeyListener{
    
    private ModeloTabelaAtendente modeloTabelaTrabalhador = new ModeloTabelaAtendente();
    static Logger logger = Servicos.carregaLog(JanelaListaAtendente.class);

    public JanelaListaAtendente() throws SQLException, ClassNotFoundException {
    	TrabalhadorModel model = new TrabalhadorModelImpl();
        initComponents();
        setResizable(false);
        txt_cpfBuscaTrabalhador.setVisible(false);
        char tipo = Janela.getTipoDeTrabalhador().charAt(0);
        switch (tipo) {
		case 'A':
			modeloTabelaTrabalhador.setTrabalhadors(model.consultaAllTrabalhadorByTipo(EnumTipoTrabalhador.APOIO.getTipo()));
			break;
		case 'F':
			modeloTabelaTrabalhador.setTrabalhadors(model.consultaAllTrabalhadorByTipo(EnumTipoTrabalhador.AFI.getTipo()));
		}
        this.setTitle(EnumTitulo.TITULO_LISTA_APOIO.getTitulo());
        painelListarTrabalhador.setVisible(true);
        tabelaTrabalhador.getTableHeader().setReorderingAllowed(false);
        tabelaTrabalhador.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        tabelaTrabalhador.setAutoCreateRowSorter(true);
    }
    
    private void initComponents() {

        bg_filtrarPorPaciente = new javax.swing.ButtonGroup();
        painelListarTrabalhador = new javax.swing.JPanel();
        painelFiltroTrabalhador = new javax.swing.JPanel();
        painelFiltrarPor = new javax.swing.JPanel();
        rb_filtrarPorCPF = new javax.swing.JRadioButton();
        rb_filtrarPorNome = new javax.swing.JRadioButton();
        painelCamadasFiltrarPor = new javax.swing.JLayeredPane();
        txt_nomeTrabalhador = new javax.swing.JTextField();
        txt_cpfBuscaTrabalhador = new javax.swing.JFormattedTextField();
        painelResultadosTrabalhador = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tabelaTrabalhador = new javax.swing.JTable();
        btn_alterarTrabalhador = new javax.swing.JButton();
        btn_excluirTrabalhador = new javax.swing.JButton();
        btn_cancelarTrabalhador = new javax.swing.JButton();

        bg_filtrarPorPaciente.add(rb_filtrarPorCPF);
        bg_filtrarPorPaciente.add(rb_filtrarPorNome);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setBounds(new java.awt.Rectangle(250, 25, 0, 0));

        painelFiltroTrabalhador.setBorder(javax.swing.BorderFactory.createTitledBorder(null, EnumLabelAndBotao.FILTRO.getTexto(), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(EnumFormatos.FONTE_TAHOMA.getFormato(), 1, 12))); // NOI18N


        painelFiltrarPor.setBorder(javax.swing.BorderFactory.createTitledBorder(null, EnumLabelAndBotao.FILTRAR_POR.getTexto(), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(EnumFormatos.FONTE_TAHOMA.getFormato(), 1, 11))); // NOI18N

        rb_filtrarPorCPF.setText(EnumLabelAndBotao.CPF.getTexto());
        rb_filtrarPorCPF.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rb_filtrarPorCPFActionPerformed(evt);
            }
        });

        rb_filtrarPorNome.setSelected(true);
        rb_filtrarPorNome.setText(EnumLabelAndBotao.NOME.getTexto());
        rb_filtrarPorNome.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rb_filtrarPorNomeActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout painelFiltrarPorLayout = new javax.swing.GroupLayout(painelFiltrarPor);
        painelFiltrarPor.setLayout(painelFiltrarPorLayout);
        painelFiltrarPorLayout.setHorizontalGroup(
            painelFiltrarPorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelFiltrarPorLayout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addGroup(painelFiltrarPorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(rb_filtrarPorCPF)
                    .addComponent(rb_filtrarPorNome))
                .addContainerGap(33, Short.MAX_VALUE))
        );
        painelFiltrarPorLayout.setVerticalGroup(
            painelFiltrarPorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelFiltrarPorLayout.createSequentialGroup()
                .addComponent(rb_filtrarPorCPF)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(rb_filtrarPorNome))
        );

        txt_nomeTrabalhador.setBorder(javax.swing.BorderFactory.createTitledBorder(null,EnumLabelAndBotao.NOME.getTexto(), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(EnumFormatos.FONTE_TAHOMA.getFormato(), 1, 11))); // NOI18N
        
        txt_nomeTrabalhador.setBounds(20, 0, 330, 70);
        txt_nomeTrabalhador.addKeyListener(this);
        painelCamadasFiltrarPor.add(txt_nomeTrabalhador, javax.swing.JLayeredPane.DEFAULT_LAYER);

        txt_cpfBuscaTrabalhador.setBorder(javax.swing.BorderFactory.createTitledBorder(null, EnumLabelAndBotao.CPF.getTexto(), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(EnumFormatos.FONTE_TAHOMA.getFormato(), 1, 11))); // NOI18N
        try {
            txt_cpfBuscaTrabalhador.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter(EnumFormatos.CPF.getFormato())));
        } catch (java.text.ParseException ex) {
        	logger.error(ex.getMessage());
            ex.printStackTrace();
        }
        
        txt_cpfBuscaTrabalhador.setBounds(20, 0, 170, 70);
        txt_cpfBuscaTrabalhador.addKeyListener(this);
        painelCamadasFiltrarPor.add(txt_cpfBuscaTrabalhador, javax.swing.JLayeredPane.DEFAULT_LAYER);

        javax.swing.GroupLayout painelFiltroTrabalhadorLayout = new javax.swing.GroupLayout(painelFiltroTrabalhador);
        painelFiltroTrabalhador.setLayout(painelFiltroTrabalhadorLayout);
        painelFiltroTrabalhadorLayout.setHorizontalGroup(
            painelFiltroTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelFiltroTrabalhadorLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(painelFiltrarPor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(3, 3, 3)
                .addComponent(painelCamadasFiltrarPor, javax.swing.GroupLayout.PREFERRED_SIZE, 355, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(147, 147, 147))
        );
        painelFiltroTrabalhadorLayout.setVerticalGroup(
            painelFiltroTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelFiltroTrabalhadorLayout.createSequentialGroup()
                .addGroup(painelFiltroTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(painelFiltrarPor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(painelFiltroTrabalhadorLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(painelCamadasFiltrarPor, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        painelResultadosTrabalhador.setBorder(javax.swing.BorderFactory.createTitledBorder(null, EnumLabelAndBotao.RESULTADOS.getTexto(), javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font(EnumFormatos.FONTE_TAHOMA.getFormato(), 1, 12))); // NOI18N

        tabelaTrabalhador.setModel(modeloTabelaTrabalhador);
        
        jScrollPane1.setViewportView(tabelaTrabalhador);

        btn_alterarTrabalhador.setIcon(new javax.swing.ImageIcon(getClass().getResource(EnumResources.ICONE_MODIFICAR.getCaminho()))); // NOI18N
        btn_alterarTrabalhador.setText(EnumLabelAndBotao.ALTERAR.getTexto());
        btn_alterarTrabalhador.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                try {
					btn_alterarTrabalhadorActionPerformed(evt);
				} catch (SQLException e) {
					logger.error(e.getMessage());
					e.printStackTrace();
				} catch (ClassNotFoundException e) {
					logger.error(e.getMessage());
					e.printStackTrace();
				}
            }
        });

        btn_excluirTrabalhador.setIcon(new javax.swing.ImageIcon(getClass().getResource(EnumResources.ICONE_LIXEIRA.getCaminho()))); // NOI18N
        btn_excluirTrabalhador.setText(EnumLabelAndBotao.EXCLUIR.getTexto());
        btn_excluirTrabalhador.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                try {
					btn_excluirTrabalhadorActionPerformed(evt);
				} catch (NumberFormatException e) {
					logger.error(e.getMessage());
					e.printStackTrace();
				} catch (SQLException e) {
					logger.error(e.getMessage());
					e.printStackTrace();
				} catch (ClassNotFoundException e) {
					logger.error(e.getMessage());
					e.printStackTrace();
				}
            }
        });

        btn_cancelarTrabalhador.setIcon(new javax.swing.ImageIcon(getClass().getResource(EnumResources.ICONE_CANCELAR.getCaminho()))); // NOI18N
        btn_cancelarTrabalhador.setText(EnumLabelAndBotao.CANCELAR.getTexto());
        btn_cancelarTrabalhador.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btn_cancelarTrabalhadorActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout painelResultadosTrabalhadorLayout = new javax.swing.GroupLayout(painelResultadosTrabalhador);
        painelResultadosTrabalhador.setLayout(painelResultadosTrabalhadorLayout);
        painelResultadosTrabalhadorLayout.setHorizontalGroup(
            painelResultadosTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelResultadosTrabalhadorLayout.createSequentialGroup()
                .addGroup(painelResultadosTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(painelResultadosTrabalhadorLayout.createSequentialGroup()
                        .addGap(203, 203, 203)
                        .addComponent(btn_alterarTrabalhador)
                        .addGap(18, 18, 18)
                        .addComponent(btn_excluirTrabalhador)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btn_cancelarTrabalhador))
                    .addGroup(painelResultadosTrabalhadorLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 758, Short.MAX_VALUE)))
                .addContainerGap())
        );
        painelResultadosTrabalhadorLayout.setVerticalGroup(
            painelResultadosTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, painelResultadosTrabalhadorLayout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 335, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(painelResultadosTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btn_alterarTrabalhador)
                    .addComponent(btn_excluirTrabalhador)
                    .addComponent(btn_cancelarTrabalhador))
                .addContainerGap())
        );

        javax.swing.GroupLayout painelListarTrabalhadorLayout = new javax.swing.GroupLayout(painelListarTrabalhador);
        painelListarTrabalhador.setLayout(painelListarTrabalhadorLayout);
        painelListarTrabalhadorLayout.setHorizontalGroup(
            painelListarTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, painelListarTrabalhadorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(painelListarTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(painelFiltroTrabalhador, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(painelResultadosTrabalhador, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        painelListarTrabalhadorLayout.setVerticalGroup(
            painelListarTrabalhadorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(painelListarTrabalhadorLayout.createSequentialGroup()
                .addComponent(painelFiltroTrabalhador, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(painelResultadosTrabalhador, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(painelListarTrabalhador, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(painelListarTrabalhador, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }

    private void btn_alterarTrabalhadorActionPerformed(java.awt.event.ActionEvent evt) throws SQLException, ClassNotFoundException {
    	JanelaUtil.getInstance().janelaListarAtendente_AlterarTrabalhador(tabelaTrabalhador, modeloTabelaTrabalhador.getTrabalhadorAt(tabelaTrabalhador.getSelectedRow()));
        this.setVisible(false);
    }

    private void btn_excluirTrabalhadorActionPerformed(java.awt.event.ActionEvent evt) throws NumberFormatException, SQLException, ClassNotFoundException {
    	TrabalhadorModel model = new TrabalhadorModelImpl();
        if(tabelaTrabalhador.getSelectedRow() == -1){
            Visao.showMessageWarning(EnumMensagens.MSG_ALERTA_AA_N_SELECIONADO.getMensagem(), "Aviso do sistema");
            return;
        }
        model.inativaTrabalhador(modeloTabelaTrabalhador.getTrabalhadorAt(tabelaTrabalhador.getSelectedRow()).getId());
        setVisible(false);
        this.dispose();
    }

    private void pesquisarTrabalhadorActionPerformed() {
          String busca = null;
          final TableRowSorter<ModeloTabelaAtendente> sorter = new TableRowSorter<ModeloTabelaAtendente>(modeloTabelaTrabalhador);
          if(rb_filtrarPorCPF.isSelected())
        	 busca = Servicos.unFormat(txt_cpfBuscaTrabalhador.getText());
          else
             busca = txt_nomeTrabalhador.getText();
          JanelaUtil.getInstance().filtrarTabela(busca, sorter, tabelaTrabalhador, 0, 1);
    }

    private void rb_filtrarPorCPFActionPerformed(java.awt.event.ActionEvent evt) {
        txt_nomeTrabalhador.setVisible(false);
        txt_cpfBuscaTrabalhador.setText(EnumLabelAndBotao.SEM_TEXTO.getTexto());
        txt_cpfBuscaTrabalhador.setVisible(true);
    }

    private void rb_filtrarPorNomeActionPerformed(java.awt.event.ActionEvent evt) {
        txt_cpfBuscaTrabalhador.setVisible(false);
        txt_nomeTrabalhador.setVisible(true);
        txt_nomeTrabalhador.setText(EnumLabelAndBotao.SEM_TEXTO.getTexto());
    }

    private void btn_cancelarTrabalhadorActionPerformed(java.awt.event.ActionEvent evt) {
        setVisible(false);
    }

    private javax.swing.ButtonGroup bg_filtrarPorPaciente;
    private javax.swing.JButton btn_alterarTrabalhador;
    private javax.swing.JButton btn_cancelarTrabalhador;
    private javax.swing.JButton btn_excluirTrabalhador;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLayeredPane painelCamadasFiltrarPor;
    private javax.swing.JPanel painelFiltrarPor;
    private javax.swing.JPanel painelFiltroTrabalhador;
    private javax.swing.JPanel painelListarTrabalhador;
    private javax.swing.JPanel painelResultadosTrabalhador;
    private javax.swing.JRadioButton rb_filtrarPorCPF;
    private javax.swing.JRadioButton rb_filtrarPorNome;
    private javax.swing.JTable tabelaTrabalhador;
    private javax.swing.JFormattedTextField txt_cpfBuscaTrabalhador;
    private javax.swing.JTextField txt_nomeTrabalhador;

	@Override
	public void keyPressed(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	/*
	 * Estou usando essa função tando para ampo de cpf e de nome por isso não presciso fazer o teste de condição if(e.getSource == ...)
	 * esse metodo pesquisarTrabalhadorActionPerformed(); faz as 2 funções tanto para cpf ou para nome 
	 */
	public void keyReleased(KeyEvent arg0) {
		pesquisarTrabalhadorActionPerformed();
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
	}
  
}

